#include<stdio.h>
#include <stdlib.h>
#include<string.h>

#define Size 20
char * GetName()
{   
    char* Name = (char*)malloc(sizeof(char) * Size);
    if(Name == NULL)
    {
        printf("malloc error!\n");
        return NULL;
    }
    // static char Name[Size] = {0};
    scanf("%s",Name);
    printf("scanf : %s\n",Name);
    return Name;
}

int main()
{
    char * s = GetName();
    printf("%s\n",s);
    //free(s);
    //整个内存的使用过程

    // int *a = (int*)malloc(sizeof(int));
    // if(a == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // *a = 10;
    // printf("%d\n",*a);

    // free(a);
    // malloc申请数组
    // int *a = (int*)malloc(sizeof(int) * 10);
    // if(a == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // for(int i = 0;i<10;i++)
    // {
    //     *(a+i) = i+1;
    // }
    // for(int i = 0;i<10;i++)
    // {
    //     printf("%d ",a[i]);
    // }
    // printf("\n");

    // free(a);
    //malloc 申请字符串
    // char *s = (char*)malloc(sizeof(char) * 4);
    // if(s == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // memset : 设置内存中的值
    // memset(s,0,10);
    // int a = 109;
    // memcpy(s,&a,4); //按照字节拷贝内存
    // //strcpy(s,"hello");
    // printf("%d\n",*(int*)s);
    // free(s);

    //malloc 申请二维数组
    //先申请指针数组
    // int* *a = (int**)malloc(sizeof(int*) * 2);
    //  if(a == NULL)
    // {
    //     printf("malloc error!\n");
    //     return -1;
    // }
    // for(int i =0; i < 2; i++)
    // {
    //     a[i]=(int*)malloc(sizeof(int) * 3);
    //     if(a[i] == NULL)
    //     {
    //     printf("malloc error!\n");
    //     return -1;
    //     }
    // }
    // for(int i = 0; i < 2;i++)
    // {
    //     for(int j = 0; j < 3; j++)
    //     {
    //         a[i][j] = i * 3 +j;
    //         printf("%d ",a[i][j]);
    //     }
    //     printf("\n");
    // }
    // for(int i = 0;i<2;i++)
    // {
    //     free(a[i]);
    // }
    // free(a);
    return 0;
}